﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using Microsoft.Web.Helpers;

using JPSOFTWARE.BON.Modelos;
using JPSOFTWARE.BON.Regra;
using JPSOFTWARE.BON.DAL;
using System.Web.SessionState;
using System.Web.Helpers;
using JPSoftwareMVC.Controllers;
using System.Net.Mail;
using JPSoftwareMVC.Filtro;

namespace JPSOFTWARE.BON.Controllers
{
    public class LoginController : Controller
    {
        public ActionResult ValidarRC()
        {
            if (!ReCaptcha.Validate(privateKey:
                "6Lc3r9ESAAAAAB-P1fGAIDrtnJWuiSY3xJpBbc0y"))
            {
                ModelState.AddModelError("", "Código de segurança incorreto.");
                return View("LogOn");
            }
            else
            {
                return RedirectToAction("Inicial", "Inicio");
            }
        }

        public ActionResult LogOn()
        {
            return View();
        }

        [HttpPost]
        public ActionResult LogOn(LoginModel model, string returnUrl)
        {
            //ValidarRC();

            if (ModelState.IsValid)
            {
                RnLogin rnLogin = new RnLogin();
                Retorno retorno = new Retorno();

                retorno = rnLogin.EfetuarLogin(model.EmailLogin, model.SenhaLogin);

                if (retorno.Sucesso)
                {
                    FormsAuthentication.SetAuthCookie(model.EmailLogin, false);

                    Session.Add("DadosUsuario", retorno.Objeto);
                    Session.Timeout = 20;

                    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                    {

                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Inicial", "Inicio");
                    }
                }
                else if (!retorno.Sucesso && !String.IsNullOrEmpty(retorno.Mensagem))
                {
                    ModelState.AddModelError("", retorno.Mensagem);
                }
                else
                {
                    return View();
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }

        public ActionResult LogOff()
        {
            //if (this.ControllerContext.HttpContext.Request.Cookies.AllKeys.Contains("UserCookieAuthentication"))
            //{
            //    HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies["UserCookieAuthentication"];
            //    cookie.Expires = DateTime.Now.AddDays(-1);
            //    this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);

            //    FormsAuthentication.SignOut();

            //    return RedirectToAction("Index", "Inicio");
            //}

            //if (Session["DadosUsuario"] != null)
            //{

            // clean auth cookie
            HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, string.Empty);
            authCookie.Expires = DateTime.Now.AddDays(-1);
            //HttpContext.Current.Response.Cookies.Add(authCookie);

            // clean session cookie    
            HttpCookie sessionCookie = new HttpCookie("ASP.NET_SessionId", string.Empty);
            sessionCookie.Expires = DateTime.Now.AddDays(-1);
            //HttpContext.Current.Response.Cookies.Add(sessionCookie);
            Session.Abandon();
            FormsAuthentication.SignOut();


            return RedirectToAction("Index", "Inicio");
        }

        [HttpGet]
        public ActionResult RecuperarSenha()
        {
            return View();
        }

        [HttpPost]
        public ActionResult RecuperarSenha(LoginModel loginEmail)
        {
            RnLogin rnLogin = new RnLogin();
            Retorno retorno = new Retorno();

            /*
             http://www.macoratti.net/11/12/aspn_ed1.htm
             *O termo XSS, também conhecido como CSS (Cross Site Scripting, não confundir com Cascading Style Sheets), 
             * é uma vulnerabilidade muito comum encontrada em aplicativos web. O XSS permite ao atacante inserir 
             *códigos maliciosos nessas páginas para que sejam executados no momento em que tais páginas forem acessadas. 
             *O ataque permite que conteúdos (scripts) em uma zona sem privilégio seja executado com permissão de uma zona 
             * privilegiada, ou seja, escalação de privilégios no cliente (web browser) executando o script.
             */
            string email = HttpUtility.HtmlEncode(loginEmail.EmailLogin);

            string assunto = "Bebida Social - Recuperação de Senha";

            try
            {
                retorno = rnLogin.RecuperarSenha(loginEmail.EmailLogin);

                string mensagem = "Sua senha é: " + retorno.Objeto;

				//WebMail.SmtpServer = "mail.netitc.com.br";
				//WebMail.SmtpPort = 2525;                
				//WebMail.From = "naoresponda@bebidasocial.com.br";
				//WebMail.UserName = "naoresponda@bebidasocial.com.br";
				//WebMail.Password = "XperiaX8*";
				//WebMail.Send(email, assunto, mensagem);

				//WebMail.SmtpServer = "mail.bebidasocial.com.br";
				//WebMail.SmtpPort = 2525;
				//WebMail.From = "contato@bebidasocial.com.br";
				//WebMail.UserName = " contato@bebidasocial.com.br";
				//WebMail.Password = "XperiaX8";

				//WebMail.Send(email, assunto, mensagem);

                MailMessage mailMessage = new MailMessage("contato@juniorpacheco.net.br", email, assunto, mensagem);
				mailMessage.IsBodyHtml = true;
				SmtpClient emailClient = new SmtpClient("mail.bebidasocial.com.br", 25);
                System.Net.NetworkCredential SMTPUserInfo = new System.Net.NetworkCredential("contato@juniorpacheco.net.br", "xperiax8");
				emailClient.UseDefaultCredentials = false;
				emailClient.Credentials = SMTPUserInfo;
				emailClient.Send(mailMessage);

                ViewData["emailEnviado"] = retorno.Sucesso;
            }
            catch (SmtpException ex)
            {
                throw ex;
            }
            return View();
        }

        [Authorize]
        [RegraAcesso(Roles = "Administrador, Distribuidora")]        
        [HttpGet]
        public ActionResult AlterarSenha()
        {
            return View();
        }

        [Authorize]
        [RegraAcesso(Roles = "Administrador, Distribuidora")]        
        [HttpPost]
        public ActionResult AlterarSenha(AlterarSenhaModel alterarSenhaModel)
        {
            Retorno retorno = new Retorno();
            RnLogin rnLogin = new RnLogin();
            try
            {
                if (Session["DadosUsuario"] != null)
                {
                    var usuarioModel = Session["DadosUsuario"] as UsuarioModel;
                    alterarSenhaModel.IdUsuario = usuarioModel.IdUsuario;

                    retorno = rnLogin.AlterarSenha(alterarSenhaModel);

                    if (retorno.Sucesso)
                    {
                        ViewData["AlterarSenha"] = true;
                        ViewData["Mensagem"] = retorno.Mensagem;
                    }

                    else
                    {
                        ViewData["AlterarSenhaErro"] = true;
                        ViewData["Mensagem"] = retorno.Mensagem;                        
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return View(alterarSenhaModel);
        }
    }
}